#pragma once

class DummyVCSolver {
private:
	struct EdgePattern {
		int size;
		int pat[25][2];
	};

	static int dir_left_down[25][2];
	static int dir_left_up[25][2];
	static int dir_right_down[25][2];
	static int dir_right_up[25][2];

	static EdgePattern edge_pattern_3[10];
	static int edge_pat_3_num;
	static EdgePattern edge_pattern_4[10];
	static int edge_pat_4_num;

	static void load_pattern_3(const std::string & filename);
	static void load_pattern_4(const std::string & filename);

	//static void add_vc(int u, int v, const std::bitset<11 * 11> & carrier);

	static bool is_edge_vc(const Board & board, int pos, int dir, int type, std::vector<std::bitset<11 * 11>> & carriers);

	
	static int fr(const Board & board, std::bitset<11 * 11> u, int vis[200], int pos);
	static int fb(const Board & board, std::bitset<11 * 11> u, int vis[200], int pos);
	


public:
	static void load_from_dir(const std::string & path);

	static int is_red_win(const Board & board);
	static int is_blue_win(const Board & board);

	static int solve(const Board & board);
};